#include <sys/ipc.h>
#include <sys/shm.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>


#define SIZE 4096

int main()
{
    //创建共享内存
    key_t key = ftok("shm",getpid());
    int shmid = shmget(key,SIZE,IPC_CREAT | 0666);

    pid_t id = fork();
    if(id == 0)//子进程作为写端
    {
        //把共享内存挂接到地址空间
        char* shm = (char*)shmat(shmid,nullptr,0);
        //向共享内存中写入数据
        char message[] = "i am son process\n";
        snprintf(shm,sizeof(message),"%s",message);
        //退出通知父进程获取数据

    }
    else//父进程作为读端
    {
        //把共享内存挂接到地址空间
        char* shm = (char*)shmat(shmid,nullptr,0);
        //等待子进程退出
        waitpid(id,nullptr,0);
        //从共享内存中获取数据
        char message[SIZE];
        strcpy(message,shm);
        //输出数据到标准输出
        printf("%s",message);
    }
    return 0;
}
